Digital circuits and methods for performing arithmetic operations on signed floating point numbers are well known in electrical engineering and are used in numerous applications ranging from computer graphics to scientific calculation. Herein, IEEE and/or IEEE-compatible floating point numbers are considered, which comprise a sign bit, an exponent portion, and a mantissa portion. Each aforementioned portion is represented by a particular number of bits, in a manner well understood by those skilled in the art.
FIG. 1 is a flowchart showing steps typically employed by conventional floating point adder/subtractor logic. Conventional techniques for adding or subtracting two numbers in IEEE floating point notation usually require an alignment of the mantissas so that both numbers' exponents are rendered equal prior to the operation. This is typically accomplished by first comparing and determining the exponential difference between the two numbers, and then shifting the mantissa of the smaller number to the right until the exponents are equal.
When a floating point operation corresponding to an absolute subtraction is to be performed, two's complement is applied to the mantissa of number to be subtracted. The two mantissas are then added together, and, if necessary, two's complement is applied to the result to ensure that the resulting magnitude is in absolute terms.
Those skilled in the art will recognize that the operations shown in FIG. 1 do not produce a normalized floating point number. Thus, additional steps are required to convert the number into normalized IEEE floating point notation. Additional steps are also required to handle special results such as Not-a-Number (NaN), infinity, or overflow. Such additional steps are well known, and are therefore not considered herein.
As shown in FIG. 1, conventional floating point adder/subtractor logic typically employs six serial steps. The performance of these steps in serial increases both the latency and the cost of conventional adder/subtractor logic. Assuming that each serial step requires a fixed amount of time, then completion of all six serial steps would require six times this fixed amount of time, regardless of the details of the logic used to implement the individual serial steps. As a result, a finite boundary is placed on the speed capabilities of conventional floating point adder/subtractors.
Conventional adder/subtractor logic also undesirably requires the implementation of at least two sets of two's complement logic. Two's complement logic is relatively expensive since each two's complement that is performed requires increment and carry logic.
Therefore, there remains a need for a high speed circuit for adding and subtracting signed floating point numbers that reduces the number of required sequential steps and simultaneously reduces cost.